---
id: upgrade
title: 历史更新
---

import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';

:::tip `TouchSocket` 框架升级/发版规则

**升级前重点关注可能造成破坏性的标签类型**：<Tag>修复</Tag>、<Tag>调整</Tag>、<Tag>移除</Tag>、<Tag>升级</Tag>

版本号规则：`主版本号.次版本号.修订版本号`

- 只要确认为框架 `bug`，则当天修复，下个周日发版，修订版本号 `加 1`。
- 其余情况，每年发布一个 `主版本`，发布时间跟随Dotnet的发布时间。

:::

## v3.2.0

**更新日期：** 2025.6.24

**更新描述：**

此次升级可能会有部分代码不兼容项，请在升级前做好备份，并且详细阅读[3.2升级指南](https://gitee.com/RRQM_Home/TouchSocket/issues/ICIJ0B)。

此次升级`Dmtp`、`IPackage`、`FastBinaryFormatter`等部分定制组件在运行时**不完全兼容3.1**，所以最好在升级时，同步升级通信对端。

其他组件在运行时，理论上没有不兼容项。

如果在升级时遇到问题，请在交流群直接提问。或者在[3.2升级指南](https://gitee.com/RRQM_Home/TouchSocket/issues/ICIJ0B)中直接回复。

:::danger 注意

本次改动移除对.Net45的支持，且以后也不会再回退支持。

:::  

**更新详情：**

**更新详情：**

#### All

- &nbsp;<Tag>优化</Tag> 全系尽量减少数组的使用，大多数合并为`ReadOnlyMemory<T>`和`ReadOnlySpan<T>`。
- &nbsp;<Tag>优化</Tag> 全系添加`CancellationToken`机制。

#### TouchSocket.Core

- &nbsp;<Tag>优化</Tag> `ByteBlock`和相关内存池模块。支持`Memory<byte>`直接入参。
- &nbsp;<Tag>优化</Tag> `TouchSocketBitConverter`一系列转换方法。
- &nbsp;<Tag>新增</Tag> `ByteBlockReader`和`ByteBlockWriter`等结构体类型的读写器。
- &nbsp;<Tag>调整</Tag> `ByteBlock`和相关内存池模块接口。由`IByteBlock`拆分为`IByteBlockReader`和`IByteBlockWriter`。

#### TouchSocket.Sockets

- &nbsp;<Tag>优化</Tag> 接收和发送性能。
- &nbsp;<Tag>新增</Tag> `BufferedTcpClient`可以原生tcp实现异步阻塞式接收。
- &nbsp;<Tag>调整</Tag> `ByteBlock`在接收和发送时的读写时，被拆分`IByteBlockReader`和`IByteBlockWriter`。


***

<details>
<summary>v3.1</summary>
<div>

## v3.1.9(10)(11)

**更新日期：** 2025.6.24

**更新描述：**

兼容性修复升级。

**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>优化</Tag> `Result`和`Result<T>`在调试时的显示。
- &nbsp;<Tag>优化</Tag> `IByteBlock`的部分方法传参。

#### TouchSocket.Mqtt

- &nbsp;<Tag>修复</Tag> `IMqttTcpClient`没有继承`ISetupConfigObject`的bug。

#### TouchSocket.SerialPort

- &nbsp;<Tag>修复</Tag> `StreamAsync`异步流模式工作异常的bug。

#### TouchSocketPro.Modbus

- &nbsp;<Tag>新增</Tag> `ModbusCoilsDrive`支持线圈读写。
- &nbsp;<Tag>新增</Tag> `ModbusDiscreteInputsDrive`支持离散输入读写。
- &nbsp;<Tag>新增</Tag> `ModbusHoldingRegistersDrive`支持保持寄存器读写。
- &nbsp;<Tag>新增</Tag> `ModbusInputRegistersDrive`支持输入寄存器读写。

#### TouchSocketPro.PlcBridges

- &nbsp;<Tag>新增</Tag> `PlcObject`组件。

***


## v3.1.8

**更新日期：** 2025.6.15

**更新描述：**

兼容性修复升级。

**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>优化</Tag> `DependencyProperty`在调试时的显示。
- &nbsp;<Tag>调整</Tag> `SafeDispose`方法的返回，由`void`改为`Result`。此修改不影响代码编译，但是需要重新编译依赖dll。

#### TouchSocket.Http

- &nbsp;<Tag>修复</Tag> 当`Http服务器`在响应后，`HttpResponse`不会清空`Content`的`bug`。 [#ICEVTN](https://gitee.com/RRQM_Home/TouchSocket/issues/ICEVTN)

#### TouchSocket.Modbus

- &nbsp;<Tag>新增</Tag> `IModbusResponse`类新增`IsSuccess`属性，可用于快捷获取响应结果。
- &nbsp;<Tag>调整</Tag> `IModbusResponse`的`Data`属性由`Byte[]`改为`ReadOnlyMemory<byte>`。如果仍需使用数组，请使用`Data.Span.ToArray()`方法获取数据。

#### TouchSocket.SerialPort

- &nbsp;<Tag>新增</Tag> `StreamAsync`性能异步流模式，可在`SerialPortOption`中直接启用。 [#PR72](https://gitee.com/RRQM_Home/TouchSocket/pulls/72)

#### TouchSocketPro.PlcBridges

- &nbsp;<Tag>新增</Tag> 新组件发布。

***

## v3.1.7

**更新日期：** 2025.6.8

**更新描述：**

兼容性修复升级。

**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>修复</Tag> FileLogger在Windows服务发布时，保存路径错误的bug。

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> ClientFactory的MinCount失效的bug。

#### TouchSocket.Dmtp

- &nbsp;<Tag>新增</Tag> FileResourceInfo类新增Create方法和Save的其他重载。更方便的支持断点续传方式。
- &nbsp;<Tag>修复</Tag> FileSectionResult类释放逻辑，减少异常的发生。

***


## v3.1.6

**更新日期：** 2025.6.2

**更新描述：**

兼容性修复升级。

**更新详情：**

#### TouchSocket.SerialPort

- &nbsp;<Tag>修复</Tag> 串口组件数据接收回调事件异常。[#ICB8IN](https://gitee.com/RRQM_Home/TouchSocket/issues/ICB8IN)

***


## v3.1.5

**更新日期：** 2025.5.24

**更新描述：**

兼容性修复升级。

**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>优化</Tag> 源生成器提示。

***


## v3.1.3(4)

**更新日期：** 2025.5.18

**更新描述：**

兼容性修复升级。

**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>优化</Tag> `Method`相关操作，具体请看[新文档](./dynamicmethod.mdx)。

#### TouchSocket.Dmtp

- &nbsp;<Tag>调整</Tag> `Dmtp Channel`的`HoldOnAsync`、`CompleteAsync`、`CancelAsync`等方法返回值改为`Result`，**不再**抛出异常。

***

## v3.1.2

**更新日期：** 2025.5.11

**更新描述：**

兼容性修复升级。

**更新详情：**

#### All

- &nbsp;<Tag>优化</Tag> 全系语法分析器和源生成器，使用增量源生成器，减少编译时间。

#### TouchSocket.Core

- &nbsp;<Tag>优化</Tag> `Logger`在添加到容器时，支持直接设置日志等级。
- &nbsp;<Tag>修复</Tag> `ByteBlock`、`ValueByteBlock`在请求的`length`为0时，会抛出异常。 [#69](https://gitee.com/RRQM_Home/TouchSocket/pulls/69)
- &nbsp;<Tag>修复</Tag> `WaitHandlePool在waitData`为`null`无法`Destroy`释放问题。[#IC64WX](https://gitee.com/RRQM_Home/TouchSocket/issues/IC64WX)
- &nbsp;<Tag>移除</Tag> 弃用`ManualContainer`。

#### TouchSocket.Sockets

- &nbsp;<Tag>优化</Tag> 发送字符串的效率，极大减少GC的产生。
- &nbsp;<Tag>优化</Tag> `UseCheckClear`的使用体验，使用更为贴切的方法名称。
- &nbsp;<Tag>修复</Tag> `CheckClearPlugin`在应用到`Client`，第2次检验会失效的`bug`。[#IC5J1I](https://gitee.com/RRQM_Home/TouchSocket/issues/IC5J1I)

#### TouchSocket.Http

- &nbsp;<Tag>新增</Tag> `HttpClientBase`请求时，新增直接添加`Host`的逻辑。[#IC6OU2](https://gitee.com/RRQM_Home/TouchSocket/issues/IC6OU2)
- &nbsp;<Tag>优化</Tag> `WebSocket`在断开时，会判断是否带有主动断开消息，如果带有，则投递主动断开的消息。
- &nbsp;<Tag>优化</Tag> `SetStatus`的使用体验，在默认参数（成功）时，则使用`SetStatusWithSuccess`代替。
- &nbsp;<Tag>调整</Tag> `WebSocket`的`Ping`与`Pong`使用`Result`进行返回。不再抛出异常。
- &nbsp;<Tag>修复</Tag> `Http`在处理请求时，阻塞接收执行上下文的bug，这会导致如果收到`http`请求，且需要较长时间执行时，如果连接方已断开，则断开消息不会立即执行的bug。也会间接导致`WebApi`的`CancellationToken`失效。


#### TouchSocket.NamedPipe

- &nbsp;<Tag>新增</Tag> `UseNamedPipeSessionCheckClear`的插件扩展方法。

#### TouchSocket.Rpc

- &nbsp;<Tag>新增</Tag> `ISingletonRpcServer`的接口。

#### TouchSocket.SerialPort

- &nbsp;<Tag>新增</Tag> `UseSerialPortSessionCheckClear`的插件扩展方法。

####  TouchSocket.WebApi

- &nbsp;<Tag>修复</Tag> `WebApi`调用上下文中`CancellationToken`不起作用的bug。

***

## v3.1.0(1)

**更新日期：** 2025.4.29

**更新描述：**

此次升级可能会有部分代码不兼容项，请在升级前做好备份，并且详细阅读[3.1升级指南](https://gitee.com/RRQM_Home/TouchSocket/issues/IC1K3I)。

此次升级所有组件在运行时**完全兼容3.0**，所以无论客户端还是服务端，都可以进行差异化更新。

**更新详情：**

#### All

- &nbsp;<Tag>调整</Tag> `DateTime`调整为`DateTimeOffset`。
- &nbsp;<Tag>调整</Tag> `Task.Run`全部使用`EasyTask.Run`再次封装运行。
- &nbsp;<Tag>优化</Tag> 所有组件在日志记录时，传入可触发源，可更好的进行日志记录。

#### TouchSocket.Core

- &nbsp;<Tag>调整</Tag> `AsyncBoundedQueue`类调整为`AsyncQueue`。
- &nbsp;<Tag>移除</Tag> `BytePool`类不再使用，目前使用`ArrayPool<T>`代替。
- &nbsp;<Tag>调整</Tag> `ByteBlock`类不再提供默认参数构造函数，目前强制传入申请长度。
- &nbsp;<Tag>调整</Tag> `ResultCode`枚举项`Fail`调整为`Failure`。
- &nbsp;<Tag>调整</Tag> `FastSerializerContext`默认不再支持`DataTable`和`DataSet`。如有需要，请自行添加`DataTableFastBinaryConverter`和`DataSetFastBinaryConverter`。
- &nbsp;<Tag>优化</Tag> `PeriodPackageAdapter`接收性能。
- &nbsp;<Tag>优化</Tag> `BlockSegment`性能。
- &nbsp;<Tag>优化</Tag> `WaitHandlePool`性能。
- &nbsp;<Tag>修复</Tag> `PeriodPackageAdapter`接收不判断最大包设定的bug。
- &nbsp;<Tag>新增</Tag> 若干扩展方法。


#### TouchSocket.Sockets

- &nbsp;<Tag>调整</Tag> `StopAsync`、`CloseAsync`等方法，在调用时不再抛出异常，而是返回`Task<Result>`。
- &nbsp;<Tag>调整</Tag> `IClient`的接口，不再继承自`IDependencyObject`。如有需求请使用`IDependencyClient`。
- &nbsp;<Tag>调整</Tag> `IServerStopedPlugin`插件，改名为`IServerStoppedPlugin`。
- &nbsp;<Tag>优化</Tag> `Tcp`、`Udp`等组件的释放逻辑

#### TouchSocket.Dmtp

- &nbsp;<Tag>优化</Tag> 添加`IActor`的方式。

#### TouchSocket.Hosting

- &nbsp;<Tag>优化</Tag> 日志记录信息。

#### TouchSocket.Http

- &nbsp;<Tag>优化</Tag> 性能大幅提高。
- &nbsp;<Tag>新增</Tag> `HttpStatusCode`静态类，支持常用的状态码。
- &nbsp;<Tag>调整</Tag> WebSocket的`SwitchProtocolToWebSocketAsync`方法返回值由`bool`改为`Result`。
- &nbsp;<Tag>调整</Tag> `InitHeaders`、`SetStatus`等方法中设置`Header`的方法，由`Add`调整为`TryAdd`。
- &nbsp;<Tag>调整</Tag> 默认情况下，服务在响应Header中，设置`Server`时，不再显示具体版本。[#IC25RJ](https://gitee.com/RRQM_Home/TouchSocket/issues/IC25RJ)
- &nbsp;<Tag>修复</Tag> HttpClient在断开连接时，不触发`OnTcpClosed`的bug。

#### TouchSocket.WebApi.Swagger

- &nbsp;<Tag>新增</Tag> 在Swagger显示时，支持参数属性。[PR68](https://gitee.com/RRQM_Home/TouchSocket/pulls/68)

#### TouchSocket.Rpc

- &nbsp;<Tag>调整</Tag> `SingletonRpcServer`名称改为`SingletonRpcServer`。
- &nbsp;<Tag>优化</Tag> `QueueRpcDispatcher`性能。


#### TouchSocket.Mqtt

- &nbsp;<Tag>新增</Tag> 功能首发。

***

</div>
</details>

<details>
<summary>v3.0</summary>
<div>

## v3.0.26

**更新日期：** 2025.4.20

**更新描述：**

兼容性修复升级。


**更新详情：**

#### TouchSocket.Rpc

- &nbsp;<Tag>修复</Tag> `RpcActionFilterAttribute`在`RpcImplementation`程序集中使用时无效bug。 [#IC0IB0](https://gitee.com/RRQM_Home/TouchSocket/issues/IC0IB0)

#### TouchSocket.Http

- &nbsp;<Tag>修复</Tag> `WebSocket`服务端`WebSocket`使用`AsyncClose()`主动关闭连接时引发`NullReferenceException`异常。 [#IC1FZ8](https://gitee.com/RRQM_Home/TouchSocket/issues/IC1FZ8)

***


## v3.0.25

**更新日期：** 2025.4.12

**更新描述：**

兼容性修复升级。


**更新详情：**

#### TouchSocket.SerialPort

- &nbsp;<Tag>修复</Tag> 接收数据时，如果业务出现延迟，则会导致接收失败的异常bug。 [#IBZHN2](https://gitee.com/RRQM_Home/TouchSocket/issues/IBZHN2)

***

## v3.0.21(3)(4)

**更新日期：** 2025.4.6

**更新描述：**

兼容性修复升级。http组件性能优化。


**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>新增</Tag> `ReadOnlySpan<byte>`的`Trim`方法。
- &nbsp;<Tag>新增</Tag> `Method`新增支持类型的直接构造函数方法。
- &nbsp;<Tag>新增</Tag> `AsyncResetEvent`新增已释放判断。
- &nbsp;<Tag>修复</Tag> `DynamicMethod`在ref、out等参数时，无法使用源生成调用的bug。
- &nbsp;<Tag>调整</Tag> `FlowOperator`的在构造函数使用最大值初始化`MaxSpeed`。

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> `TcpCore`在特点情况下不释放资源的bug。[PR](https://gitee.com/RRQM_Home/TouchSocket/pulls/65)
- &nbsp;<Tag>调整</Tag> `ShutdownAsync`调整返回值，由`Task`改为`Task<Result>`。

#### TouchSocket.Http

- &nbsp;<Tag>新增</Tag> `HttpContent`新增`TryComputeLength`的抽象方法。
- &nbsp;<Tag>新增</Tag> `HttpResponse`的`FromFileAsync`扩展新增传输限速、进度功能。[#IBYGC7](https://gitee.com/RRQM_Home/TouchSocket/issues/IBYGC7)
- &nbsp;<Tag>优化</Tag> 整个`Http`组件性能优化。
- &nbsp;<Tag>调整</Tag> `HttpHeaders`由枚举改为静态类。（此操作不影响现有代码）


***


## v3.0.20

**更新日期：** 2025.3.30

**更新描述：**

兼容性修复升级。部分方法名大小写调整。


**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>调整</Tag> `TouchSocketCoreUtility`类中的所有静态字段大小写调整。
- &nbsp;<Tag>调整</Tag> `StringExtension`类中的多个方法名大小写调整（此处调用时可能是扩展方法调用的，所以需要注意）。

#### TouchSocket.Http

- &nbsp;<Tag>修复</Tag> `HttpClient`在请求`application/x-www-form-urlencoded`时，内部未进行编码的bug。[#IBVPAD](https://gitee.com/RRQM_Home/TouchSocket/issues/IBVPAD)
- &nbsp;<Tag>新增</Tag> `HttpResponse`新增`FromHtml`扩展方法，用于直接返回`Html`页面。

#### TouchSocket.Rpc

- &nbsp;<Tag>新增</Tag> `IRpcCallContextAccessor`服务，可以在异步调用流中，通过服务直接获取到执行`Rpc`的`CallContext`。

#### TouchSocket.WebApi.Swagger

- &nbsp;<Tag>更新</Tag> `Swagger`页面版本为`v5.20.2`，以支持一键复制url等功能。 [#IBX933](https://gitee.com/RRQM_Home/TouchSocket/issues/IBX933)

#### TouchSocket.Modbus

- &nbsp;<Tag>优化</Tag> `Modbus rtu`在响应数据时的严谨性，基本排除了站号，功能码不一致时仍然返回的错误情况。 [#github-issue 54](https://github.com/RRQM/TouchSocket/issues/54)

***


## v3.0.19

**更新日期：** 2025.3.23

**更新描述：**

兼容性修复升级。


**更新详情：**

#### TouchSocket.Http

- &nbsp;<Tag>修复</Tag> Http静态内容插件在客户端不支持gzip时仍然会使用gzip的bug。
- &nbsp;<Tag>修复</Tag> Http静态内容插件在以文件响应时，限速为0的bug。[#IBVCPJ](https://gitee.com/RRQM_Home/TouchSocket/issues/IBVCPJ)

***

## v3.0.18

**更新日期：** 2025.3.16

**更新描述：**

兼容性修复升级。少量代码调整，详见&nbsp;<Tag>调整</Tag>


**更新详情：**

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> `TryShutdown`的关闭机制没有考虑异步发送队列的情况。[#IBTKMP](https://gitee.com/RRQM_Home/TouchSocket/issues/IBTKMP)
- &nbsp;<Tag>调整</Tag> `TryShutdown`方法改为`ShutdownAsync`。

#### TouchSocket.Http

- &nbsp;<Tag>修复</Tag> `HttpExtensions`中`GetBoundary`实现存在问题。[#IBT3RO](https://gitee.com/RRQM_Home/TouchSocket/issues/IBT3RO)
- &nbsp;<Tag>修复</Tag> 静态页面插件在重新载入时prefix参数丢失问题。[#IBTP38](https://gitee.com/RRQM_Home/TouchSocket/issues/IBTP38)

***


## v3.0.17

**更新日期：** 2025.3.12

**更新描述：**

兼容性修复升级。


**更新详情：**

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> UdpSessionBase的OnUdpReceiving方法添加EndPoint参数。[#IBSQVN](https://gitee.com/RRQM_Home/TouchSocket/issues/IBSQVN)

#### TouchSocket.SerialPorts

- &nbsp;<Tag>修复</Tag> SerialPortClient在接收数据时LastReceivedTime一直不会更新。[#IBSXDK](https://gitee.com/RRQM_Home/TouchSocket/issues/IBSXDK)

***


## v3.0.16

**更新日期：** 2025.3.9

**更新描述：**

兼容性修复升级。


**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>修复</Tag> 自定义适配器在接收数据时，不验证`MaxPackageSize`的`bug`。
- &nbsp;<Tag>修复</Tag> `MakeIdentifier`在获取方法名称时，不显示中文等其他字符的`bug`[#IBQQHY](https://gitee.com/RRQM_Home/TouchSocket/issues/IBQQHY)。

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> 当配置`NoDelay`时，`TcpCore`发送时仍然会把数据放入发送队列，可能会产生细微延迟 [#IBR1I2](https://gitee.com/RRQM_Home/TouchSocket/issues/IBR1I2)。
- &nbsp;<Tag>调整</Tag> `IWaitingClient`实现了无效的`Dispose`方法，目前已取消。

***


## v3.0.15

**更新日期：** 2025.3.2

**更新描述：**

兼容性修复升级。


**更新详情：**

#### All

- &nbsp;<Tag>优化</Tag> 代码规范和相关注释。

#### TouchSocket.Core

- &nbsp;<Tag>新增</Tag> `SystemExtension`新增`ReadAllToByteArray`方法。

***


## v3.0.14

**更新日期：** 2025.2.15

**更新描述：**

修复升级。区间字符适配器会有不兼容部分，请参阅[区间字符](./custombetweenanddatahandlingadapter.mdx)。


**更新详情：**

#### All

- &nbsp;<Tag>新增</Tag> 所有的`Plugin`接口。均新增快捷扩展方法，简化使用。
- &nbsp;<Tag>调整</Tag> 使用自定义的`lock`锁对象。以简化使用场景。

#### TouchSocket.Core

- &nbsp;<Tag>新增</Tag> `ILog`接口新增`DateTimeFormat`属性。 [#IBLQBX](https://gitee.com/RRQM_Home/TouchSocket/issues/IBLQBX)
- &nbsp;<Tag>修复</Tag> 自定义区间适配器在未找到开始字符的情况下，也会缓存数据的bug。 [#IBKPXU](https://gitee.com/RRQM_Home/TouchSocket/issues/IBKPXU)
- &nbsp;<Tag>调整</Tag> 自定义区间适配器的运行逻辑，简化使用方式。 [#IBKPXU](https://gitee.com/RRQM_Home/TouchSocket/issues/IBKPXU)

#### TouchSocket.Rpc

- &nbsp;<Tag>修复</Tag> `IRpcActionFilter.ExecutedAsync`在执行异常时，`Exception`参数一直为空的bug。[#IBK579](https://gitee.com/RRQM_Home/TouchSocket/issues/IBK579)

#### TouchSocket.Dmtp

- &nbsp;<Tag>新增</Tag> `TokenVerifyException`异常信息中新增Metadata属性。
- &nbsp;<Tag>修复</Tag> `TcpDmtpService`中使用`e.IsPermitOperation = false;`拒绝客户端无效的bug。[#IBKO6A](https://gitee.com/RRQM_Home/TouchSocket/issues/IBKO6A)

***

## v3.0.13

**更新日期：** 2025.1.27

**更新描述：**

兼容性修复升级。


**更新详情：**


#### TouchSocket.Core

- &nbsp;<Tag>修复</Tag> 在`net framework`下，如果`Span<byte>`为空时，`ToString`会异常的`bug`。 [#IBIYRQ](https://gitee.com/RRQM_Home/TouchSocket/issues/IBIYRQ)

***

## v3.0.12

**更新日期：** 2025.1.19

**更新描述：**

兼容性修复升级。


**更新详情：**


#### TouchSocket.Core

- &nbsp;<Tag>优化</Tag> `FileLogger`的路径合并方式。

***


## v3.0.11

**更新日期：** 2025.1.12

**更新描述：**

兼容性修复升级。


**更新详情：**

#### All

- &nbsp;<Tag>新增</Tag> 全系新增`EasyTask.ContinueOnCapturedContext`的设定，以解决`Unity3d`在`webgl`平台下，会卡住的问题。

#### TouchSocket.Core

- &nbsp;<Tag>新增</Tag> `IWaitHandlePool<T>`的接口抽象。

#### TouchSocket.Http

- &nbsp;<Tag>新增</Tag> `HttpResponse`新增`SetRedirect`重定向功能。[#IBG1QT](https://gitee.com/RRQM_Home/TouchSocket/issues/IBG1QT)
- &nbsp;<Tag>优化</Tag> `HttpRequest`在请求时的编码效率。
- &nbsp;<Tag>修复</Tag> `HttpRequest`不会对中文等非`Ascii`编码的字符进行`url encode`的`bug`。[#IBGATN](https://gitee.com/RRQM_Home/TouchSocket/issues/IBGATN)
- &nbsp;<Tag>修复</Tag> 在客户端，执行`IWebApiRequestPlugin`插件时，`HttpRequest`无法通过`GetContent`或者`GetBody`获取数据。[#IBGARB](https://gitee.com/RRQM_Home/TouchSocket/issues/IBGARB)

***

## v3.0.10

**更新日期：** 2025.1.5

**更新描述：**

兼容性修复升级。


**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>新增</Tag> `AsyncBoundedQueue`新增`Capacity`、`Count`等属性。
- &nbsp;<Tag>新增</Tag> `CustomJsonDataHandlingAdapter`自定义适配器，方便自定义继承实现。
- &nbsp;<Tag>新增</Tag> `CustomCountSpliterDataHandlingAdapter`固定数量分隔符适配器。[#IBF0Z7](https://gitee.com/RRQM_Home/TouchSocket/issues/IBF0Z7)
- &nbsp;<Tag>新增</Tag> `IByteBlock`新增`ReadT`和`WriteT`方法。

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> `CheckClearPlugin`在客户端断开后，仍然会触发断开的bug。[#IBECPA](https://gitee.com/RRQM_Home/TouchSocket/issues/IBECPA)

***

## v3.0.9

**更新日期：** 2024.12.22

**更新描述：**

兼容性修复升级。


**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>新增</Tag> `SystemTextJsonStringToClassSerializerFormatter`转换器。
- &nbsp;<Tag>新增</Tag> `IPackage`源生成时，默认支持`Guid`。[#IBC1FH](https://gitee.com/RRQM_Home/TouchSocket/issues/IBC1FH)

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> `TcpService`在`ResetId`后，偶发性客户端集合丢失客户端的问题。[#IBCUHW](https://gitee.com/RRQM_Home/TouchSocket/issues/IBCUHW)
- &nbsp;<Tag>修复</Tag> `WaitingClient`使用`ResponsedData`时第二次接受报错。[#IBC8D2](https://gitee.com/RRQM_Home/TouchSocket/issues/IBC8D2)

#### TouchSocket.SerialPort

- &nbsp;<Tag>修复</Tag> `SerialPortClient`串口组件`ProtectedMainSerialPort`属性`null`错误。[#IBBQ4A](https://gitee.com/RRQM_Home/TouchSocket/issues/IBBQ4A)


#### TouchSocket.AspNetCore

- &nbsp;<Tag>修复</Tag> `IWebSocketDmtpService`接口中缺少`Clients`属性。[#IBBQS5](https://gitee.com/RRQM_Home/TouchSocket/issues/IBBQS5)

#### TouchSocket.Modbus

- &nbsp;<Tag>优化</Tag> `ModbusRtu`在`crc`校验失败时，会抛出`ResponseMemoryVerificationError = 99`的错误码。[#IBC1J2](https://gitee.com/RRQM_Home/TouchSocket/issues/IBC1J2)

#### TouchSocket.WebApi

- &nbsp;<Tag>新增</Tag>` WebApi`支持`Put`、`Delete`、`Options`请求方式。
- &nbsp;<Tag>修复</Tag> `WebApi`当参数解析异常时，`RpcActionFilterAttribute`无法捕获。[#IBCI94](https://gitee.com/RRQM_Home/TouchSocket/issues/IBCI94)
- &nbsp;<Tag>调整</Tag> `WebApiParserPlugin`使用`Mapping`代替`GetRouteMap`和`PostRouteMap`。

#### TouchSocket.JsonRpc

- &nbsp;<Tag>优化</Tag> `JsonRpc`支持`Aot`。

***

## v3.0.8

**更新日期：** 2024.12.15

**更新描述：**

兼容性修复升级。


**更新详情：**

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> `IPHost`类，在`Mono`运行时会异常的bug。 [#IBAG51](https://gitee.com/RRQM_Home/TouchSocket/issues/IBAG51)
- &nbsp;<Tag>调整</Tag> `UdpSessionBase`类调整`ReceivingData`为`OnUdpReceiving`。 
- &nbsp;<Tag>新增</Tag> `Udp`组件，新增`IUdpReceivingPlugin`插件。[#IBB1F6](https://gitee.com/RRQM_Home/TouchSocket/issues/IBB1F6)

#### TouchSocket.AspNetCore

- &nbsp;<Tag>修复</Tag> 当使用基于`WebSocket`协议，搭建`DmtpServer`服务时 使用`app.UseOutputCache()`缓存中间件导致连接失败后，重连无响应。[#IBAPTQ](https://gitee.com/RRQM_Home/TouchSocket/issues/IBAPTQ)

#### TouchSocket.Dmtp

- &nbsp;<Tag>修复</Tag> `DmtpActor`类，在连接成功时，`Handshaking`事件参数`e.Message`无法传回到请求端。

#### TouchSocket.SerialPorts

- &nbsp;<Tag>修复</Tag> `SerialPortClient`类，在关闭或者释放时，资源无法释放的bug。 [#IBB8FD](https://gitee.com/RRQM_Home/TouchSocket/issues/IBB8FD)

***

## v3.0.7

**更新日期：** 2024.12.8

**更新描述：**

兼容性修复升级。在.Net9.0中，启用Lock锁代替object锁，提高锁效率。


**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>修复</Tag> `ValueByteBlock`类，在`WritePackage`时数据无效的bug。 
- &nbsp;<Tag>优化</Tag> 开放`PackageFastBinaryConverter`类，以支持二进制数据序列化源生成。 

#### TouchSocket.Dmtp

- &nbsp;<Tag>新增</Tag> `DmtpRpc`新增`RpcDispatcher`调度器，支持多线程并发，或者单线程调度。
- &nbsp;<Tag>优化</Tag> `DefaultSerializationSelector`优化支持`System.Text.Json`源生成模式的序列化。
- &nbsp;<Tag>调整</Tag> 触发`OnFileTransferred`事件的时机调到`SendAsync`前面，目的是保证调用方在收到回复时，响应方已经完成事件处理。此操作理论上不会对现有运行逻辑造成影响。
- &nbsp;<Tag>修复</Tag> `DmtpRpc`在发送`Rpc`请求时，如果请求模式使用`OnlySend`、或者`WaitSend`，则会抛出异常的bug。[#IB9F8P](https://gitee.com/RRQM_Home/TouchSocket/issues/IB9F8P)


#### TouchSocket.Modbus

- &nbsp;<Tag>新增</Tag> 在`IModbusResponse`返回响应时，会同时携带返回响应的当前请求`IModbusRequest`。

#### TouchSocket.WebApi

- &nbsp;<Tag>优化</Tag> `WebApiSerializerConverter`类，以支持更好的`System.Text.Json`源生成模式的序列化。

#### TouchSocket.Rpc

- &nbsp;<Tag>新增</Tag> 在`ReenterableAttribute`特性，可以强制设置`Rpc`函数是否为重入模式。
- &nbsp;<Tag>新增</Tag> `ConcurrencyRpcDispatcher`并发调度器，支持多线程并发。
- &nbsp;<Tag>新增</Tag> `ImmediateRpcDispatcher`当前调度器，直接在当前线程执行。
- &nbsp;<Tag>新增</Tag> `QueueRpcDispatcher`队列调度器，把所有请求，放在一个队列中，等待处理。

***


## v3.0.5(6)

**更新日期：** 2024.12.1

**更新描述：**

兼容性修复升级。全面支持`PluginManager`容器化模块和`Scoped`区域划分。

>此修改不影响现有运行逻辑。但是如果是Asp.Net Core项目，则可能会影响`Scoped`服务运行结果。

**更新详情：**

#### TouchSocket.Core

- &nbsp;<Tag>新增</Tag> `FlowOperator`类。以实现流量速度限制。 
- &nbsp;<Tag>新增</Tag> `PluginManager`类。新增`FromIoc`的设定，支持插件容器化。 
- &nbsp;<Tag>优化</Tag> `Result`类。使用`record`修饰，简化使用逻辑。 
- &nbsp;<Tag>调整</Tag> `IResolver`的`Resolve`行为。当服务未注册时，会返回`null`。不会再触发异常。
- &nbsp;<Tag>调整</Tag> `SetupConfigObject`在Build时，会创建一个新的Scoped生命周期的容器。这个在现有架构下，不会影响运行结果。
- &nbsp;<Tag>修复</Tag> `Metadata`在添加相同键值时，会异常的bug，正确操作应该是覆盖旧值。 
- &nbsp;<Tag>移除</Tag> `IResolver`移除对`IRegistered`接口的实现，所以无法再使用`IResolver`判断某个服务是否已注册。
- &nbsp;<Tag>移除</Tag> `IResolver`移除对`TryResolve`扩展方法实现，请使用`Resolve`直接代替。

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> `IPHost`在`.NET Framework`下，设定任意端口无效的bug。 [#IB7PM1](https://gitee.com/RRQM_Home/TouchSocket/issues/IB7PM1)，[#IA8NQ2](https://gitee.com/RRQM_Home/TouchSocket/issues/IA8NQ2)

#### TouchSocket.Http

- &nbsp;<Tag>新增</Tag> `HttpBase`新增`ReadCopyToAsync(Stream stream, HttpFlowOperator flowOperator)`方法。支持传输进度、速度显示。[#IB7GIC](https://gitee.com/RRQM_Home/TouchSocket/issues/IB7GIC)
- &nbsp;<Tag>新增</Tag> `HttpFlowOperator`类，支持Http上传、下载文件（流）时，可以方便的实现限速、传输进度、速度显示等。
- &nbsp;<Tag>新增</Tag> `StreamHttpContent`在传输流数据时，支持`HttpFlowOperator`相关操作。


#### TouchSocket.Rpc
- &nbsp;<Tag>修复</Tag> `Rpc`代码生成器在生成通用泛型类型时，会失败的bug。[#IB7IB2](https://gitee.com/RRQM_Home/TouchSocket/issues/IB7IB2)


***


## v3.0.4

**更新日期：** 2024.11.24

**更新描述：**

修复升级。**WebSocket有少量代码差异**，下面会详细介绍。

**更新详情：**

#### TouchSocket.Core
- &nbsp;<Tag>新增</Tag> `JsonPackageAdapter`适配器，专门解决纯Json数据格式的粘分包。详情参见：[JsonPackageAdapter](./packageadapter.mdx)。
- &nbsp;<Tag>新增</Tag> `IByteBlock`新增`WriteNormalString`方法，用于写入普通字符串。
- &nbsp;<Tag>新增</Tag> `Container`容器新增Scoped生命周期，但是本身容器并未实现功能，如果需使用，请使用[TouchSocket.Core.DependencyInjection](https://www.nuget.org/packages/TouchSocket.Core.DependencyInjection)。 
- &nbsp;<Tag>新增</Tag> `Tcp、NamedPipe、SerialPort、DmtpRpc、JsonRpc、WebApi`等所有组件，支持Scoped容器。（需配合[TouchSocket.Core.DependencyInjection](https://www.nuget.org/packages/TouchSocket.Core.DependencyInjection)容器）。 

#### TouchSocket.Http
- &nbsp;<Tag>新增</Tag> `HttpStaticPagePlugin`新增`SetContentTypeProvider(Action<IContentTypeProvider> provider)`方法。
- &nbsp;<Tag>新增</Tag> `WebSocket`新增`CloseAsync(WebSocketCloseStatus closeStatus, string statusDescription)`方法。
- &nbsp;<Tag>修复</Tag> `WebSocket`在`Close`时，不符合规范的bug。[#IAAF3U](https://gitee.com/RRQM_Home/TouchSocket/issues/IAAF3U)，[#IB5IH0](https://gitee.com/RRQM_Home/TouchSocket/issues/IB5IH0)
- &nbsp;<Tag>调整</Tag> `IWebSocketClosingPlugin`的事件参数，由`ClosedEventArgs`调整为`ClosingEventArgs`。 <Highlight color="#FFA500">重新实现接口解决</Highlight>


#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> `TcpClient`在重连之后，适配器失效的bug。 [#IB6KZJ](https://gitee.com/RRQM_Home/TouchSocket/issues/IB6KZJ)

#### TouchSocket.Rpc
- &nbsp;<Tag>新增</Tag> `Rpc`服务新增`IScopedRpcServer`。


#### TouchSocket.SerialPort
- &nbsp;<Tag>修复</Tag> `SerialPortClient`在重连之后，适配器失效的bug。 

#### TouchSocket.NamedPipe

- &nbsp;<Tag>新增</Tag> `INamedPipeSession`新增`DataHandlingAdapter`属性。 
- &nbsp;<Tag>修复</Tag> `NamedPipeClient`在重连之后，适配器失效的bug。 

#### TouchSocket.Modbus

- &nbsp;<Tag>优化</Tag> `Modbus`在写入时，会携带`IModbusResponse`的返回值。 [#IATPWB](https://gitee.com/RRQM_Home/TouchSocket/issues/IATPWB)


***

## v3.0.3

**更新日期：** 2024.11.17

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>优化</Tag> `WaitingClient`在收到`ResponsedData`数据时，优先建议使用`ByteBlock`，在高效场景中代替原`Data`属性。

***


## v3.0.2

**更新日期：** 2024.11.15

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> 串口的发送与接收无法通过插件获取到原始数据。[#IB4NF4](https://gitee.com/RRQM_Home/TouchSocket/issues/IB4NF4)

***

## v3.0.0(1)

**更新日期：** 2024.11.13

**更新描述：**

大版本升级，有部分不兼容性升级。所以请在升级前做好备份，同时在升级之后，请务必阅读[v3.0升级指南](https://gitee.com/RRQM_Home/TouchSocket/issues/IB45VJ)。

**本次改动在运行时完全兼容`v2.1`，所以客户端和服务器可以差异版本更新。**

**更新详情：**

#### SDK

- &nbsp;<Tag>新增</Tag> 新增`net9.0`支持。
- &nbsp;<Tag>移除</Tag> 移除`net7.0`支持，但是不影响`net7.0`使用，因为最低到`net6.0`的支持。


#### TouchSocket.Core

- &nbsp;<Tag>优化</Tag> `Plugin`组件默认支持`AOT`，不再借助委托实现。 
- &nbsp;<Tag>优化</Tag> `AppMessenger`组件默认支持`AOT`。 
- &nbsp;<Tag>优化</Tag> `DependencyObject`类使用“懒汉式”加载内部成员，减少内存使用。 
- &nbsp;<Tag>新增</Tag> `PluginManager`支持在运行时移除插件。 
- &nbsp;<Tag>新增</Tag> `Method`类，在方法、或类添加`[DynamicMethod]`特性时，默认支持`AOT`，为动态调用提供极大方便。

#### TouchSocket.Core.DependencyInjection

- &nbsp;<Tag>修复</Tag> `AspNetCoreContainer`不支持`KeysService`的bug。

#### TouchSocket.Sockets

- &nbsp;<Tag>修复</Tag> `IReceiver`在启用缓存模式时，如果已经完成接收，则会抛出异常的bug。 [#IB44LL](https://gitee.com/RRQM_Home/TouchSocket/issues/IB44LL)

#### TouchSocket.Http

- &nbsp;<Tag>调整</Tag> `HttpRequest`在请求时，不用传参，直接使用默认构造函数即可。
- &nbsp;<Tag>移除</Tag> `GetMultifileCollection`相关扩展方法，使用`GetFormCollectionAsync`代替。

#### TouchSocket.Rpc

- &nbsp;<Tag>新增</Tag> `ICallContext`继承`IDependencyObject`，支持**扩展属性**读写，可以更方便的开发。
- &nbsp;<Tag>调整</Tag> `Rpc`特性取消构造函数入参，使用属性设置。受影响的有：`DmtpRpc`、`JsonRpc`、`XmlRpc`、`WebApi`。


#### TouchSocket.Dmtp

- &nbsp;<Tag>修复</Tag> `DmtpRpc`在`Avalonia-Web`工作时，连接时间超长的bug。
- &nbsp;<Tag>修复</Tag> `IWebSocketDmtpClient`不实现`IDmtpClient`的bug。
- &nbsp;<Tag>修复</Tag> `DmtpHeartbeatPlugin`在长时间运行时，可能会失效的bug。
- &nbsp;<Tag>调整</Tag> `[DmtpRpc]`特性不再允许继承，所有设置也是通过属性设置。

#### TouchSocket.JsonRpc

- &nbsp;<Tag>调整</Tag> `[JsonRpc]`特性不再允许继承，所有设置也是通过属性设置。

#### TouchSocket.WebApi

- &nbsp;<Tag>新增</Tag> `[FromBody]`特性，支持指定参数来源自Http的请求Body。
- &nbsp;<Tag>新增</Tag> `[FromForm]`特性，支持指定参数来源自Http的请求Form表单。
- &nbsp;<Tag>新增</Tag> `[FromHeader]`特性，支持指定参数来源自Http的请求Header。
- &nbsp;<Tag>新增</Tag> `[FromQuery]`特性，支持指定参数来源自Http的请求Query。
- &nbsp;<Tag>调整</Tag> `[WebApi]`特性不再允许继承，所有设置也是通过属性设置。
- &nbsp;<Tag>调整</Tag> WebApi的请求方式，目前全部使用`WebApiRequest`类来表示全部入参，一般如果使用代理，或者源生成的话，只需要重新生成即可。
- &nbsp;<Tag>移除</Tag> `HttpMethodType.GET`枚举，使用`HttpMethodType.Get`代替。
- &nbsp;<Tag>移除</Tag> `HttpMethodType.POST`枚举，使用`HttpMethodType.Post`代替。

#### TouchSocket.XmlRpc

- &nbsp;<Tag>调整</Tag> `[XmlRpc]`特性不再允许继承，所有设置也是通过属性设置。

***

</div>
</details>

<details>
<summary>v2.1</summary>
<div>

## v2.1.10

**更新日期：** 2024.10.25

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>优化</Tag> `CheckClearPlugin`插件频繁输出poll日志的不合理设计。

***

## v2.1.9

**更新日期：** 2024.10.14

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> CheckClearPlugin长时间工作时可能失效的bug。


***

## v2.1.8

**更新日期：** 2024.10.11

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> TcpService在Stop的时候，有个内部异常打了log。 [#IAWD4N](https://gitee.com/RRQM_Home/TouchSocket/issues/IAWD4N)


***

## v2.1.7

**更新日期：** 2024.10.5

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> TcpService在启动时如果异常，则无法再重新启动的bug。

***

## v2.1.6

**更新日期：** 2024.10.1

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>新增</Tag> HttpContent机制，能上传超大数据。
- &nbsp;<Tag>新增</Tag> StreamHttpContent，能上传流数据，例如：文件流。
- &nbsp;<Tag>修复</Tag> Task内部异常时没有及时try，导致全局捕获时有无用捕获。
- &nbsp;<Tag>修复</Tag> TcpServiceBase在调用StopAsync时，IServerStopedPlugin插件无法触发的bug。
- &nbsp;<Tag>移除</Tag> TriggerQueue无用类。
- &nbsp;<Tag>优化</Tag> HttpRequest，使其能上传超大数据。

***

## v2.1.4(5)

**更新日期：** 2024.9.23

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>新增</Tag> DmtpRpc恢复性新增Xml序列化。
- &nbsp;<Tag>修复</Tag> 使用源生成（IPackage）打包时报错。[#IASTWJ](https://gitee.com/RRQM_Home/TouchSocket/issues/IASTWJ)
- &nbsp;<Tag>修复</Tag> Result泛型类中隐式转换错写成显示转换的bug。
- &nbsp;<Tag>修复</Tag> DmtpRpc序列化选择器没有预留Json序列化配置的bug。


***


## v2.1.3

**更新日期：** 2024.9.22

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>优化</Tag> 部分类，方法注释。
- &nbsp;<Tag>优化</Tag> 多数英文字符串资源。
- &nbsp;<Tag>修复</Tag> Tcp、NamedPipe、SerialPort等组件在主动调用Close时，ClosedEventArgs参数属性Manual为false的bug，导致重连插件偶发性再次连接。[#IASH1A](https://gitee.com/RRQM_Home/TouchSocket/issues/IASH1A)
- &nbsp;<Tag>修复</Tag> `ByteBlock`类部分bug。
- &nbsp;<Tag>移除</Tag> `DecimalConver`类，该类功能已完全由`TouchSocketBitConverter`代替，属于无用类。
- &nbsp;<Tag>调整</Tag> 受保护方法`ProtectedResetId`方法，名称更改为`ProtectedResetIdAsync`。

***


## v2.1.2

**更新日期：** 2024.9.19

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>优化</Tag> 部分类，方法注释。
- &nbsp;<Tag>修复</Tag> TcpClient在释放时，重连插件会无限连接的bug，该bug会导致CPU占用过高。[#IAS9NG](https://gitee.com/RRQM_Home/TouchSocket/issues/IAS9NG)

***

## v2.1.1

**更新日期：** 2024.9.18

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>新增</Tag> 在`MemoryCache`中实现新的`TryGetValue`方法。
- &nbsp;<Tag>优化</Tag> 密封`CacheEntry`类并优化缓存管理逻辑。
- &nbsp;<Tag>优化</Tag> 扩展`PackageExtensions`类，增加泛型方法以提高可读性和可重用性。
- &nbsp;<Tag>优化</Tag> 优化`HttpStaticPagePlugin`构造函数和`StaticPageOptions`类以简化静态页面配置。
- &nbsp;<Tag>修复</Tag> 在`FastBinaryFormatter`中改进序列化逻辑，特别是对于**多维数组**的处理。 [#IARKE1](https://gitee.com/RRQM_Home/TouchSocket/issues/IARKE1)
- &nbsp;<Tag>修复</Tag> 在`IPackage`中改进打包、解包逻辑，特别是对于**多维数组**的处理。

***

## v2.1.0

**更新日期：** 2024.9.15

**更新描述：**

大版本升级，有部分不兼容性升级。所以请在升级前做好备份，同时在升级之后，请务必阅读[v2.1升级指南](https://gitee.com/RRQM_Home/TouchSocket/issues/I9QSDK)。

**更新亮点：**

本次更新，主要有以下亮点：

1. 全系支持Span、ValueTask、Memory、Unsafe等依赖。大幅提升并发性能与低GC能力。
2. 全系组件，尽量多的提供了异步Api，大幅度提升并发能力。
3. 重构fast序列化，Package包模式、Http、WebSocket等组件，使之更加易用。
4. 资源国际化。本次更新会在内部使用中英双语信息提示，这在日志记录，堆栈跟踪等场景更加符合区域化。
5. 增加完整注释。基本上能达到95%的代码注释率。

**更新详情：**

#### TouchSokcet.Core

- &nbsp;<Tag>新增</Tag> TouchSocketBitConverter新增To、UnsafeTo、WriteBytes、UnsafeWriteBytes等可以直接操作Span。 
- &nbsp;<Tag>新增</Tag> Crc类新增Span相关转换。 
- &nbsp;<Tag>新增</Tag> CustomDataHandlingAdapter新增`bool TryParseRequest(ref TByteBlock byteBlock, out TRequest request)`方法，可以同步完成适配器数据解析。 
- &nbsp;<Tag>新增</Tag> SingleStreamDataAdapterTester泛型测试器，可以对TryParseRequest进行完整性测试。 
- &nbsp;<Tag>新增</Tag> IPackage源生成器新增自定义PackageMember特性，用来定义打包的顺序和自定义转换器。 
- &nbsp;<Tag>新增</Tag> SetupConfigObject的SetupAsync。 
- &nbsp;<Tag>优化</Tag> CustomDataHandlingAdapter支持结构体作为泛型类型。 
- &nbsp;<Tag>优化</Tag> Fast序列化支持自定义FastSerializerContext，这可以极大的利用源生成来决定序列化和反序列化。 
- &nbsp;<Tag>调整</Tag> 分离MemoryCache的同步和异步接口。 
- &nbsp;<Tag>调整</Tag> ByteBlock取消Stream的继承，如果需要使用Stream，可以使用ByteBlock.AsStream()。 
- &nbsp;<Tag>调整</Tag> Gzip类调整ByteBlock参数为Stream。 
- &nbsp;<Tag>调整</Tag> CustomDataHandlingAdapter解析的数据，均会以ReadonlySpan的形式投递。 
- &nbsp;<Tag>调整</Tag> IPackage接口，使之既可以在ByteBlock工作，也可以在ValueByteBlock工作。 
- &nbsp;<Tag>调整</Tag> PluginManager使用接口作为唯一键，规定一个接口中有且仅有一个方法。
- &nbsp;<Tag>调整</Tag> ByteBlock、ValueByteBlock均继承IByteBlock接口规范。
- &nbsp;<Tag>移除</Tag> ByteBlock、ValueByteBlock移除Buffer属性，如果想获取有效数据，可以通过Memory、Span等获取，如果想获取容量可以使用TotalMemory属性。
 
#### TouchSokcet.Sockets

- &nbsp;<Tag>调整</Tag> Tcp、Udp组件，默认情况下适配器将为null，并且可以正常工作。 
- &nbsp;<Tag>调整</Tag> SocketClient、ISocketClient等服务器辅助类，改名为TcpSessionClient和ITcpSessionClient。 


***

</div>
</details>


<details>
<summary>v2.0</summary>
<div>

## v2.0.18

**更新日期：** 2024.9.10

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> 当Cancel延迟到Reset之后时，新获取的waitData会出现Status为Cancel异常bug [#IAQ2AI](https://gitee.com/RRQM_Home/TouchSocket/issues/IAQ2AI)。


***


## v2.0.17

**更新日期：** 2024.8.30

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> 使用AspNetCore容器时，默认没有注册ILog的bug。

***


## v2.0.16

**更新日期：** 2024.8.19

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> tcp在winform中会使用主线程接收的bug，导致各种同步接收异常。


***


## v2.0.15

**更新日期：** 2024.8.9

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> 当客户端断开连接时，http响应会出现object is null的bug提示。


## v2.0.13（14）

**更新日期：** 2024.7.24

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> 重连插件在长时间运行时，会失效的bug。
- &nbsp;<Tag>修复</Tag> ssl加密下，连接响应时间过长bug[#IAET6V](https://gitee.com/RRQM_Home/TouchSocket/issues/IAET6V) 。

## v2.0.12

**更新日期：** 2024.7.17

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> socket在接收连接时，异常无法拦截的bug[#IADIGX](https://gitee.com/RRQM_Home/TouchSocket/issues/IADIGX)。
- &nbsp;<Tag>调整</Tag> 日志记录在执行时，先判断日志组件的可用性。

## v2.0.11

**更新日期：** 2024.7.12

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> Metadata在Add时不会覆盖原key的bug。



## v2.0.10

**更新日期：** 2024.5.31

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> WebSocket快捷命令行bug。 [#I9TG3V](https://gitee.com/RRQM_Home/TouchSocket/issues/I9TG3V)。


## v2.0.9

**更新日期：** 2024.5.29

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> UdpPackage适配器在工作时调时导致的bug。 [#I9SYTR](https://gitee.com/RRQM_Home/TouchSocket/issues/I9SYTR)。
- &nbsp;<Tag>修复</Tag> Http在GetBoundary时bug。 [#I9PXWT](https://gitee.com/RRQM_Home/TouchSocket/issues/I9PXWT)。



## v2.0.(7)8

**更新日期：** 2024.5.17

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> udp首次建立连接无法接收数据的bug。 [#I9PV7C](https://gitee.com/RRQM_Home/TouchSocket/issues/I9PV7C)。

## v2.0.6

**更新日期：** 2024.5.12

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> FlowGate的waitTime小于0时bug。


## v2.0.5

**更新日期：** 2024.5.2

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> wsclient Received事件与插件触发bug。[#I9L9WI](https://gitee.com/RRQM_Home/TouchSocket/issues/I9L9WI)。
- &nbsp;<Tag>修复</Tag> ws命令行执行bug。

## v2.0.4

**更新日期：** 2024.4.30

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> linux平台下，Socket吞吐量大幅降低。[#I9KURV](https://gitee.com/RRQM_Home/TouchSocket/issues/I9KURV)。
- &nbsp;<Tag>修复</Tag> WebSocket在进行连接时，Host的Header写法错误，没有包含端口。[#I9KUVI](https://gitee.com/RRQM_Home/TouchSocket/issues/I9KUVI)。


## v2.0.3

**更新日期：** 2024.4.14

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> Tcp在接收时，内存池释放存在延迟，可能导致内存池快速扩张，浪费内存。[#I9FVAA](https://gitee.com/RRQM_Home/TouchSocket/issues/I9FVAA)。
- &nbsp;<Tag>修复</Tag> 在使用Host模型时，注入瞬态的TcpClient，在第一次获取实例是正常的，第二次就失败。[#I9G3SV](https://gitee.com/RRQM_Home/TouchSocket/issues/I9G3SV)。
- &nbsp;<Tag>修复</Tag> WebSocketClient连接其他服务器时显示 “操作已被取消”。[#I9GG05](https://gitee.com/RRQM_Home/TouchSocket/issues/I9GG05)。
- &nbsp;<Tag>新增</Tag> ConcurrentList新增实现IReadOnlyList接口。


## v2.0.2

**更新日期：** 2024.4.1

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> TouchSocketBitConverter中的ToBooleans方法存在Bug[#I9C1UY](https://gitee.com/RRQM_Home/TouchSocket/issues/I9C1UY)。
- &nbsp;<Tag>修复</Tag> SystemExtensions中的GetBit和SetBit方法[#I9C1WM](https://gitee.com/RRQM_Home/TouchSocket/issues/I9C1WM)。
- &nbsp;<Tag>修复</Tag> HttpService多次响应下载文件时，不会响应的bug。



## v2.0.1

**更新日期：** 2024.3.16

**更新描述：**

兼容性修复升级。

**更新详情：**

- &nbsp;<Tag>修复</Tag> HttpClient，无法通过HttpResponse.GetBody()获取响应内容[#I989SI](https://gitee.com/RRQM_Home/TouchSocket/issues/I989SI)。
- &nbsp;<Tag>修复</Tag> SetNoDelay 异常[#I979B0](https://gitee.com/RRQM_Home/TouchSocket/issues/I979B0)。
- &nbsp;<Tag>修复</Tag> 调用Dmtp服务的大数据传输时，如果循环调用会出现收到的数据和发送的数据不一致。实际上该问题是由`ByteBlock`写入扩容bug而导致的[#I96FNF](https://gitee.com/RRQM_Home/TouchSocket/issues/I96FNF)。


## v2.0.0

**更新日期：** 2024.3.9

**更新描述：**

此版本是大版本更新。可能会产生很多不兼容部分，所以升级之前请做好备份，并且请详细阅读下列更新内容。

**升级指南：**

- 升级时请先升级至`2.0.0-beta.190`，再升级至`2.0.0-rc.2`版本，因为正式版对于[Obsolete]特性的成员直接删除了，所以为友好升级，请先升级至此版本。
- 由2.0.0-beta.200至2.0.0-beta.220 [#I8DE1D](https://gitee.com/RRQM_Home/TouchSocket/issues/I8DE1D)
- 由2.0.0-beta.220至2.0.0-beta.230 [#I8LAX4](https://gitee.com/RRQM_Home/TouchSocket/issues/I8LAX4)

**更新详情：**

#### TouchSokcet.Core

- &nbsp;<Tag>优化</Tag> FileLogger支持指定不同目录。
- &nbsp;<Tag>调整</Tag> 所有自定义插件必须在自身内，主动调用e.InvokeNext()时，才会调用下一个插件。不然会中断插件传递。同时e.Handled功能依然有效。
- &nbsp;<Tag>调整</Tag> Log项。LogType调整为LogLevel，并且不需要位运算。直接按日志等级输出。
- &nbsp;<Tag>调整</Tag> 修改IPluginsManager名称为IPluginsManager。
- &nbsp;<Tag>移除</Tag> DependencyProperty中，移除对类型的定义。
- &nbsp;<Tag>移除</Tag> 所有组件的基础插件，强制用户插件必须继承PluginBase，然后实现需要的接口。
- &nbsp;<Tag>移除</Tag> BytePool在创建ByteBlock时，移除EqualSize的设定，因为这会影响内存池的效率。
- &nbsp;<Tag>调整</Tag> 修改所有委托为异步Task。
- &nbsp;<Tag>调整</Tag> 修改所有Setup返回值为void。
- &nbsp;<Tag>修复</Tag> Metadata在0个成员长度时，会被反序列化成null的bug。
- &nbsp;<Tag>修复</Tag> PluginsManager在注册具有继承的插件时，会无法识别的bug。

#### TouchSokcet.Sokcets

- &nbsp;<Tag>优化</Tag> IPHost支持从int、string直接隐式转换。
- &nbsp;<Tag>调整</Tag> TouchSocket所有“ID”属性，改名为“Id”。
- &nbsp;<Tag>调整</Tag> TouchSocket所有插件的执行顺序，移动至内部重写方法之后。
- &nbsp;<Tag>调整</Tag> TouchSocket所有`ResetID`改名为`ResetId`。
- &nbsp;<Tag>调整</Tag> UseCheckClear项，SetDuration调整名称为SetTick。
- &nbsp;<Tag>调整</Tag> UseCheckClear项，不仅可以适用服务器，客户端也适用。
- &nbsp;<Tag>调整</Tag> Config配置中，SetDataHandlingAdapter调整为SetTcpDataHandlingAdapter。
- &nbsp;<Tag>调整</Tag> 适配器项，CustomDataHandlingAdapter中的Filter方法中，byteBlock参数使用in修饰。
- &nbsp;<Tag>调整</Tag> 适配器项，DataHandlingAdapter改名为TcpDataHandlingAdapter。
- &nbsp;<Tag>调整</Tag> 适配器项，DataAdapterTester改名为TcpDataAdapterTester。
- &nbsp;<Tag>调整</Tag> Config项，所有适配器的相关配置，使用SetAdapterOption配置。
- &nbsp;<Tag>移除</Tag> UsePlugin的显式配置，当调用ConfigurePlugins时，会自动启用。

#### TouchSokcet.Http

- &nbsp;<Tag>调整</Tag> WSCommandLinePlugin改名为WebSocketCommandLinePlugin。
- &nbsp;<Tag>新增</Tag> WebSocket添加[同步非阻塞Read](./websocketservice.mdx#52-websocket显式readasync)。
- &nbsp;<Tag>新增</Tag> WebSocket的WSDataFrame新增IsPing、IsPong、IsText、IsBinary、IsClose等属性。
- &nbsp;<Tag>新增</Tag> 静态网页插件新增NavigateAction与ResponseAction等委托，可以在静态页面请求之前重定向，或者请求返回时设置header等。

#### TouchSokcet.Rpc

- &nbsp;<Tag>移除</Tag> 整体功能迁移至TouchSokcet(Pro).Dmtp。
- &nbsp;<Tag>调整</Tag> [RpcActionFilter](./rpcactionfilter.mdx#33-规则)执行策略和顺序 
- &nbsp;<Tag>调整</Tag> 修改ConfigureRpcStore为AddRpcStore。 
- &nbsp;<Tag>新增</Tag> [RealityProxy](./rpcgenerateproxy.mdx)透明代理方式。 
- &nbsp;<Tag>新增</Tag> [DispatchProxy](./rpcgenerateproxy.mdx)添加OnBefore和OnAfter的AOP调用。

#### TouchSokcet(Pro).Dmtp

- &nbsp;<Tag>调整</Tag> 原TouchRpc全系改名为Dmtp。例如：原TcpTouchRpcClient改名为TcpDmtpClient。
- &nbsp;<Tag>调整</Tag> 原TouchRpc中InvokeOption，改名为DmtpInvokeOption。InvokeOption依然有效，但是在调用DmtpRpc时，则无法指定序列化方式。所以可能需要使用DmtpInvokeOption。
- &nbsp;<Tag>调整</Tag> 原TouchRpc中Invoke直接调用的方式，改为InvokeT。
- &nbsp;<Tag>调整</Tag> Dmtp相关配置，使用SetDmtpOption配置。
- &nbsp;<Tag>移除</Tag> **暂时**移除EventBus功能，后续可能考虑添加。
- &nbsp;<Tag>新增</Tag> ws协议的TouchRpc服务端，增加HttpContext上下文获取。
- &nbsp;<Tag>新增</Tag> 文件传输项，开放增加SetMaxSpeed功能。
- &nbsp;<Tag>新增</Tag> DmtpRpc。
- &nbsp;<Tag>新增</Tag> DmtpRpc组件在调用时，可以通过DmtpInvokeOption传入Metadata元数据。
- &nbsp;<Tag>修复</Tag> DmtpRpc在调用无ref，out的函数时，参数会为null的bug。

#### TouchSokcet.JsonRpc

- &nbsp;<Tag>修复</Tag> JsonRpc使用内联数组调用[#I79OFZ](https://gitee.com/RRQM_Home/TouchSocket/issues/I79OFZ)。
- &nbsp;<Tag>调整</Tag> Rpc服务使用调用上下文时不需要再添加`IncludeCallContext`。

#### TouchSokcet.WebApi

- &nbsp;<Tag>新增</Tag> WebApi新增[Swagger页面](./swagger.mdx)。
- &nbsp;<Tag>调整</Tag> Rpc服务使用调用上下文时不需要再添加`IncludeCallContext`。

#### TouchSokcet.XmlRpc

- &nbsp;<Tag>调整</Tag> Rpc服务使用调用上下文时不需要再添加`IncludeCallContext`。

#### TouchSokcet(Pro).Hosting

- &nbsp;<Tag>新增</Tag> 新发布Hosting的包，用于构建更加强壮的运行程序。

#### TouchSokcet.SerialPorts

- &nbsp;<Tag>新增</Tag> 新发布串口的包。

#### TouchSokcet(Pro).Modbus

- &nbsp;<Tag>新增</Tag> 新发布Modbus的包，支持Tcp、Udp、Rtu、RtuOverTcp、RtuOverUdp协议的主站（Poll）和从站（Slave）。
---


</div>
</details>

<details>
<summary>v1.3</summary>
<div>

## v1.3

更新日期：2023.3.1

更新描述：兼容性更新。

  - &nbsp;<Tag>优化</Tag> 整体增加异步方法。
  - &nbsp;<Tag>优化</Tag> Rpc源代码生成策略，支持接口实例并存。
  - &nbsp;<Tag>修复</Tag> TcpClient在UseReconnect插件时，Disconnect事件不触发bug。
  - &nbsp;<Tag>新增</Tag> ws协议的TouchRpc服务端，增加HttpContext上下文获取。
---

</div>
</details>

<details>
<summary>v1.2</summary>
<div>

## v1.2

更新日期：2023.2.15

更新描述：兼容性更新。

  - &nbsp;<Tag>优化</Tag> TouchRpc支持命名元组。
  - &nbsp;<Tag>优化</Tag> Rpc源代码生成策略。
  - &nbsp;<Tag>修复</Tag> TouchRpc在Websocket协议下，启动，连接异常bug。
  - &nbsp;<Tag>修复</Tag> TouchRpc在调用WaitSend下失败的bug。
  - &nbsp;<Tag>修复</Tag> TouchRpc在Handshaked时，调用Rpc超时bug。
  - &nbsp;<Tag>修复</Tag> 序列化、反射在unity中使用il2cpp编译的bug。
  - &nbsp;<Tag>修复</Tag> 反序列化在初次加载时会失败的bug。
  - &nbsp;<Tag>修复</Tag> BytePool没有公共构造函数的bug。
  - &nbsp;<Tag>新增</Tag> ws协议的TouchRpc服务端，增加HttpContext上下文获取。
  - &nbsp;<Tag>新增</Tag> ByteBlock对于int，long等数据，写入和读取的时候支持大小端指定。
  - &nbsp;<Tag>新增</Tag> IServicePlugin插件，用于显示通知服务器的启动状态。
  - &nbsp;<Tag>新增</Tag> Rpc支持接口特性标记。
  - &nbsp;<Tag>调整</Tag> 将BytePool由静态调整为实例，且由其Default实例作为默认。
---

</div>
</details>

<details>
<summary>v1.1</summary>
<div>

## v1.1

更新日期：2023.1.13

更新描述：小版本升级，可能会有不兼容。请按下列提示修改。 

  - &nbsp;<Tag>优化</Tag> TouchRpc系文件传输时，文件夹不存在的提示。
  - &nbsp;<Tag>优化</Tag> WaitingClient，当客户端断开连接时，可选是否抛出异常。
  - &nbsp;<Tag>优化</Tag> Fast序列化时。可选序列化只读属性。
  - &nbsp;<Tag>修复</Tag> 多个不稳定Bug。
  - &nbsp;<Tag>新增</Tag> Tcp客户端新增Disconnecting事件。在主动Close时生效。
  - &nbsp;<Tag>调整</Tag> 多个事件类名称修改，请按照提示修改即可。
  - &nbsp;<Tag>移除</Tag> 多个无用方法参数。
---

</div>
</details>

<details>
<summary>v1.0</summary>
<div>

## v1.0.0

更新日期：2023.1.1

更新描述：大版本升级，请详细阅读下列更新日志。

  - &nbsp;<Tag>升级</Tag> 将最高版本升级为NET7。
  - &nbsp;<Tag>优化</Tag> Tcp系异步发送效率。
  - &nbsp;<Tag>优化</Tag> TouchRpc系Channel的稳健性。
  - &nbsp;<Tag>修复</Tag> 多个不稳定Bug。
  - &nbsp;<Tag>新增</Tag> ValueByteBlock，在简单代码块里面能有效减少创建的类。
  - &nbsp;<Tag>新增</Tag> MemoryCache类，其功能类似微软官方。但是支持全部泛型。
  - &nbsp;<Tag>新增</Tag> [IPackage系](https://www.yuque.com/rrqm/touchsocket/ag9tyar9mmhsme0m)。该系列能以超高效率的进行二进制序列化。
  - &nbsp;<Tag>新增</Tag> SingleTimer类，不可重入的Timer。
  - &nbsp;<Tag>新增</Tag> Jsonrpc支持自定义适配器解析（EE）
  - &nbsp;<Tag>新增</Tag> 严重TouchRpc系OnRouting通知，所有的客户端之间的通信，都必须经过OnRouting的筛查。
  - &nbsp;<Tag>新增</Tag> TouchRpc系小文件传输，在文件小于1Mb时，其传输效率是常规传输的10倍以上。
  - &nbsp;<Tag>新增</Tag> TouchRpc系超大文件多链路传输，支持多个客户端协同传输同一个文件，这在互联网环境中，效率比常规传输提高类3-5倍。
  - &nbsp;<Tag>新增</Tag> TouchRpc系Redis组件，能实现双端共同存储。
  - &nbsp;<Tag>调整</Tag> 严重精简所有命名空间，删除所有三级命名空间。例如：TouchSocket.Core.ByteManager精简为TouchSocket.Core。
  - &nbsp;<Tag>调整</Tag> 严重删除Newtonsoft.Json的源代码嵌入。全局的Json会根据环境动态调整，详情见[Json工具](https://www.yuque.com/rrqm/touchsocket/emqy43#PfVh1)
  - &nbsp;<Tag>调整</Tag> 严重框架默认日志由ConsoleLogger，替换为EmptyLogger（不输出任何东西）。
  - &nbsp;<Tag>调整</Tag> 严重Tcp全系，在连接时，ID的初始值使用long类型从0递增。
  - &nbsp;<Tag>调整</Tag> 严重Tcp服务器，将定时清理无数据交互的选项替换为UseCheckClear插件。并且默认没有启用，需要手动加入。
  - &nbsp;<Tag>调整</Tag> Tcp系适配器，取消部分参数。
  - &nbsp;<Tag>调整</Tag> DataLock改名为DataSecurity。
  - &nbsp;<Tag>调整</Tag> EasyAction改名EasyTask。
  - &nbsp;<Tag>调整</Tag> IMessage改名IMessageObject。
  - &nbsp;<Tag>调整</Tag> TokenInstance改名MessageInstance。
  - &nbsp;<Tag>调整</Tag> TouchRpc系，精简常规文件传输操作。
  - &nbsp;<Tag>调整</Tag> 严重TouchRpc系，所有插件通知参数，默认都设为不允许操作，需要手动设置e.IsPermitOperation=true。
  - &nbsp;<Tag>移除</Tag> Newtonsoft.Json的源代码嵌入。全局的Json会根据环境动态调整，详情见[Json工具](https://www.yuque.com/rrqm/touchsocket/emqy43#PfVh1)。

*** 更新示例指南 ***

（1）适配器参数报错：直接删除isAsync参数，以及isAsync为**True**的所有逻辑。
![image.png](@site/static/img/docs/upgrade-1.png)
（2）依赖属性的声明报错：增加泛型约束即可，详情查看[依赖属性](https://www.yuque.com/rrqm/touchsocket/ubk57o#jyzSl)
![image.png](@site/static/img/docs/upgrade-2.png)
（3）服务端定时清理警告：在配置插件中使用UseCheckClear，并且进行相关配置。
![image.png](@site/static/img/docs/upgrade-3.png)
![image.png](@site/static/img/docs/upgrade-4.png)

---

</div>
</details>

<details>
<summary>v0</summary>
<div>

## 版本号: 0.7.0
更新日期：2022.9.21
更新描述：兼容性更新，增强型更新。**RPC内容需要客户端与服务器同步更新**。
更新详情：

优化
1. Fast二进制序列化，支持自定义序列化。
2. TouchRpc全系，在文件传输等大型IO时，由于心跳失败而断开连接。
3. 优化AspNetCore的IContainer。
4. TcpCommandLinePlugin与WSCommandLinePlugin支持获取客户端参数。

新增
1. 插件实例会以单例注入容器。
2. 所有适配器支持[缓存超时](https://www.yuque.com/rrqm/touchsocket/83526e6320dfc85fef317d850aa51e92#Z0S0g)设定。
3. 修改所有事件为委托。
4. 开放[AspnetCore](https://www.yuque.com/rrqm/touchsocket/55e5bbf58745fa639dba511c7bcd54d1#WqOmh)创建Tcp，Http等服务器的配置。
5. IClient增加发送、接收的最后时间记录。
6. Http支持多文件上传（目前仅支持小文件，具体大小以实际运行内存为准，实测100Mb没问题）。
7. Websocket插件默认会处理Close报文。且插件支持Close。
8. Rpc支持模板代码重写。
9. TouchRpc支持元组。
10. JsonRpc支持Websocket协议。

修改 
1. IScopedContainer修改为IContainerProvider
 
修复
1. BytePool回收内存时不判断大小的bug。

删除
1. 无。


---

## 版本号: 0.6.0
更新日期：2022.9.10
更新描述：兼容性更新，增强型更新。**专为Unity 3D适配**。
更新详情：

优化
1. Gzip的压缩效率。
2. 发送效率。

新增
1. IDataCompressor数据传输压缩接口。
2. [RemoteStream](https://www.yuque.com/rrqm/touchsocket/ukq0mu)支持数据读写压缩。
3. WaitResultPackageBase类，专属非序列化的数据格式化。
4. DelaySender[延迟缓存发送](https://www.yuque.com/rrqm/touchsocket/1f21a56ee75f896a5b5b38b37b071881#RL0kx)。

修改
1. 无

修复
1. Rpc注册服务为单例时，实际上是瞬时服务的bug。

删除
1. 独立线程发送。

---

## 版本号: 0.5.0
更新日期：2022.9.1
更新描述：兼容性更新，增强型更新。
更新详情：

优化
1. 全局资源的获取逻辑。

新增
1. Container增加卸载注册功能。
2. FilePool新增FileStorageStream的获取。
3. http客户端（及websocket）支持代理和验证代理。
4. TouchRpc全系新增[远程文件操作](https://www.yuque.com/rrqm/touchsocket/pearz0)
5. TouchRpc（除udp）新增[远程流访问](https://www.yuque.com/rrqm/touchsocket/ukq0mu)

修改
1. 无

修复
1. 修复Http客户端请求重复Header时的bug。

删除
1. TouchRpc全系的事件操作，推荐直接插件的方式，或者使用TouchRpcActionPlugin然后添加委托。


更新示例
TouchRpc的相关事件均已使用插件代替。所以请使用插件实现操作。如果需要事件等功能的话，可以用TouchRpcActionPlugin的插件实现。例如：
```csharp showLineNumbers
.UsePlugin()
.ConfigurePlugins(a=> 
{
    a.Add<TouchRpcActionPlugin<TcpTouchRpcClient>>()//此处的逻辑可用插件替代完成。
    .SetFileTransfering((client, e) =>
    {
        //有可能是上传，也有可能是下载
        client.Logger.Info($"服务器请求传输文件，ID={client.ID}，请求类型={e.TransferType}，文件名={e.FileInfo.FileName}");
    })
    .SetFileTransfered((client, e) =>
    {
        //传输结束，但是不一定成功，需要从e.Result判断状态。
        client.Logger.Info($"服务器传输文件结束，ID={client.ID}，请求类型={e.TransferType}，文件名={e.FileInfo.FileName}，请求状态={e.Result}");
    });
})
```

---

## 版本号: 0.4.5
更新日期：2022.8.25
更新描述：兼容性更新，增强型更新。
更新详情：

优化
1. FileLogger的写入逻辑，大大地提升了写入效率。

新增
1. [Pipeline适配器](https://www.yuque.com/rrqm/touchsocket/ofnliu)
2. [TLV适配器](https://www.yuque.com/rrqm/touchsocket/wug4bv)
3. WaitingClient支持按条件等待返回。
4. 日志系统可以筛选日志的输出类型
5. Rpc系统，可以使用单例、瞬时生命周期的服务。
6. Rpc系统，可定义持久化模型。
7. Rpc在使用瞬时生命周期的服务时，可以直接获取调用上下文。
8. XmlRpc增加调用上下文。

修改
1. 日志系统。
2. Rpc的调用上下文均采用接口，例如：JsonRpc改为IJsonRpcCallContext，WebApi为IWebApiCallContext。
3. IRpcActionFilter的参数列表。

修复
1. UdpSession资源不释放的Bug。

删除
1. 冗余元素。


---

## 版本号: 0.3.5
更新日期：2022.8.12
更新描述：兼容性更新，增强型更新。
更新详情：

优化
1. 各类客户端发送逻辑。
2. Method类的调用逻辑。
 
新增
1. 适配器可以设定发送IRequestInfo对象。
2. 插件新增UseWebSocket的快捷方式。
3. ReconnectionPlugin插件可以获得重连次数的重载设置。
4. ProTcpService的服务注入。
5. ProHttpService的服务注入。
6. ProIOC容器的共享使用。

修改 
1. 各类发送逻辑，以最小化发送方法为基础，其余方法改为扩展方法。
2. 相关接口的实现。
3. 由网友[修改GetInfo](https://gitee.com/dotnetchina/TouchSocket/pulls/11)

修复
1. Container获取泛型失败bug。
2. BetweenAnd适配器适配器部分bug。
3. Router标签无法路由的bug。
4. 修复TouchRpc推送文件状态不正确bug
5. 修复独立线程在断线重连后发送bug。

删除
1. 冗余的发送方法，不影响上版本任何使用。


---


## 版本号: 0.2.4
更新日期：2022.7.28
更新描述：兼容性更新。
更新详情：

优化 
1. 优化IOC容器。
2. 优化Metadata的写入方式。
3. FileLogger，当日志文件达到1Mb时，会再新增文件序号。

新增
1. Mapper类，支持简单类型映射
2. Tcp服务器、客户端、udp等增加端口复用配置。
3. Pro轮询式断线重连。
4. ProNATService转发客户端重连。

修改
1. RRQM二进制序列化，改名为Fast。
2. TouchRpcClient连接时的Metadata，改为由Config配置注入。
3. FilePool，取消延迟释放机制。

修复
1. 修复WebSocket连接问题

删除
1. 客户端直接调用的短线重连方式。仅保留在Config注入的功能。

---

## 版本号: 0.1.0
更新日期：2022.7.16
更新描述：初始化版本发布。由RRQMSocket迁移而来。

迁移指南：
### 1.所有类的命名空间修改，此处如果类型名未修改的话，可由vs智能提示解决。
### 2.类型名称修改
| 原类型名称 | 新类型名称 |
| --- | --- |
| RRQMBitConverter | TouchSocketBitConverter |
| RRQMConfig | TouchSocketConfig |
| RRQMConverter | TouchSocketConverter |
| RRQMDependencyObject | DependencyObject |
| MsgEventArgs | MsgEventArgs |
| RRQMEventAgrs | TouchSocketEventArgs |
| IServerProvider | IRpcServer |
| ServerProvider | SingletonRpcServer |
| RRQMOverlengthException | OverlengthException |

### 3.使用逻辑修改
1）原RRQMConfig设置Logger的方法，改为容器注入：
![image.png](@site/static/img/docs/upgrade-5.png)
断线重连逻辑
![image.png](@site/static/img/docs/upgrade-6.png)
RpcStore使用变更
如果是仅有一个Rpc解析器，那么可以直接删除RpcStore的声明，从而使用对应的**解析器实例**，直接注册服务。然后可以通过其属性RpcStore，获取到具体的RpcStore实例。

如果是有多个解析器，那么，首先可以使用任意一个解析器的RpcStore属性实例，作为主RpcStore，然后添加其他解析器。当然也可以直接new RpcStore，然后统一管理解析器。其中构造函数中的Container容器，可以直接new Container()，但是更建议使用和解析器相同的容器，这样注入的服务会变得全局可用。


</div>
</details>

